package org.fjsei.yewu.entity.fjtj;

import jakarta.persistence.*;
import lombok.*;
import org.fjsei.yewu.pojo.SliceSyncRes;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.UUID;

/**虚拟的，接口获取后生成 过渡性，数据迁移用中间表，非应用的表和数据库。
 * 旧检验表的 所有单位； 反而有 addDate 用于同步，监察没有实际上设置日期？
 *  监察的也有单位表 JC_UNT_MGE
 * */
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "TB_UNT_MGE"
   //   ,uniqueConstraints={@UniqueConstraint(columnNames={"UNT_ID"}),
   //           @UniqueConstraint(columnNames={"JC_UNT_ID"}) }
        )
@Builder(toBuilder=true)
public class UntMge implements SliceSyncRes {
  //  @Id
  //  @GeneratedValue(strategy = GenerationType.IDENTITY)
  //  private Long id;
    /*  @Id
        @GenericGenerator(name="jpa-uuid",strategy = "uuid")
        @GeneratedValue(generator = "jpa-uuid")
        private String id;*/
    //主键由多个字段联合组成，每个表只能定义一个主键。报错Composite-id class must implement Serializable
    //【稀奇了】id== -1 和 0 都用上了
    //实际数据UNT_ID是唯一的。
    @Column(name = "id")
    @Id
    private Long id;    //关键！ 目前UNT_ID最大=278293 ;本表合计194194条，
    //穿越时空隧道, 另外一个平台数据库的ID;
    //JC_UNT_ID重复的很多。
//    private Long  JC_UNT_ID;      //监察对应单位ID
    @Column
    private String  UNT_NAME;
    @Column
    private Integer  UNT_STATE;  //: "1"
    @Column
    private String UNT_ADDR;      //'单位详细地址'  填写很乱，最终门栋地址。
    //个人的 也算=单位？
    @Column
    private String UNT_ORG_COD;      //组织机构代码
    //居民身份证号就是你的社会信用代码，组织统一社会信用代码  18位+验证码；
    @Column
    private String UNT_LKMEN;      //单位联系人
    @Column
    private String UNT_MOBILE;      //单位联系人手机
    @Column
    private String UNT_PHONE;   //: "85287568/13906994526/13805919406"
    @Column
    private String POST_COD;      //单位邮编
    //需要牵涉到的字段： "Z99"
    @Column
    private String  INDUSTRY_PROP_COD;   //行业性质 'Z01'=个人; 字典表：TB_DICT_INDUSTRYPROPCOD；
    @Column
    private String  UNT_PROP_COD;    //"单位性质代码", DATA_TYPE: "NUMBER" @没啥用，很多没填！！
    @Column
    private String  ECONM_TYPE_COD;  //: "经济类型代码", DATA_TYPE: "NUMBER" @没啥用，很多没填！！
    @Column
    private String  UNT_AREA_COD;
    @Column
    private String LEADER; //: "无" 法定代表人或负责人
    @Column
    private String LEADER_PHONE; //: ""
    private Long  MANAGE_UNT; //: ""
    @Column
    private Double  UNT_LAT; //: "24.711565"
    @Column
    private Double  UNT_LONG; //: "118.626611"

    private UUID uunit;    //本平台对应的Unit ID;

    @Column(name = "fail")
    private String  fail;

  /**1. 使用 @ElementCollection 和 @CollectionTable
   * 2. 使用 @Convert(converter = IntegerArrayConverter.class) 和 AttributeConverter
   * 3. 使用 @Lob 和 JSON 序列化
   * 【启动报错】要删除旧的实体表。
   * */
    @Lob
    @Column(name = "untTypes",columnDefinition = "jsonb")
    private String  untTypesJson;
    //@Transient    不会被序列化。
    private transient Long[] untTypes;
    public Long[] getUntTypes() {
      if (untTypes == null && untTypesJson != null) {
        try {
          untTypes = new ObjectMapper().readValue(untTypesJson, Long[].class);
        } catch (IOException e) {
          throw new RuntimeException(e);
        }
      }
      return untTypes;
    }
    public void setUntTypes(Long[] untTypes) {
      this.untTypes = untTypes;
      try {
        this.untTypesJson = new ObjectMapper().writeValueAsString(untTypes);
      } catch (IOException e) {
        throw new RuntimeException(e);
      }
    }
}

/*对方编码
"untTypes": [
        "1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "9",
        "10",
        "11",
        "21",
        "22",
        "23",
        "31",
        "41",
        "51",
        "52",
        "53",
        "54",
        "55",
        "57",
        "58",
        "59",
        "61",
        "71",
        "91",
        "211",
        "212",
        "213",
        "1001",
        "1002"
      ],
      "untTypeName": "使用单位,生产单位,充装单位,监察机构,检验检测机构,行业管理单位,评审机构,维保单位,考试培训机构,
      使用单位,安装改造维修单位,制造单位,设计单位,充装单位,监察机构,综合检验机构,
      型式试验机构,无损检测机构,气瓶检验机构,安全阀校验机构,自检检验机构,行业检验机构 ,水质检验机构,行业管理单位,评审机构,维保单位,维修单位,安装单位,改造单位,考试机构,培训机构",
* */

/* @数据库修改脚本：    维护任务用到，反过来关联接口对方给的单位ID倒查表！
create index tb_unt_mge__index_uunit on public.tb_unt_mge (uunit);
* */
